﻿using ConfExpert.Forms.Base;
using ConfExpert.Forms.Depo;
using ConfExpert.Utility;
using DevExpress.Data;
using DevExpress.Utils;
using DevExpress.XtraBars;
using DevExpress.XtraEditors.Controls;
using DevExpress.XtraEditors.Repository;
using DevExpress.XtraGrid.Views.Grid;
using DevTeam;
using System;
using System.Collections.Generic;
using System.Data;
using System.Drawing;
using System.Windows.Forms;

namespace ConfExpert.Forms.Aksesuar.Satinalma
{ 
    public partial class Talep : XForm
    {
        public string POIds;

        DataTable dtTalep;
        int BrandId;
        int SezonId;
        string OrderRef;
        bool IsManuel;

        public Talep(DataTable dtTalep, int brandId, int sezonId, string orderRef, bool isManuel = false)
        {
            InitializeComponent();

            List<string> colsToDel = new List<string>();
            foreach (DataColumn col in dtTalep.Columns)
            {
                if (col.ColumnName != "AksesuarId" && col.ColumnName != "TalepEdilen" && col.ColumnName != "EksikMiktar")
                    colsToDel.Add(col.ColumnName);
            }

            foreach (string colToDel in colsToDel)
                dtTalep.Columns.Remove(colToDel);

            this.dtTalep = dtTalep.Select("Isnull(TalepEdilen,0)>0").CopyToDataTable();
            this.BrandId = brandId; 
            this.SezonId = sezonId; 
            this.OrderRef = orderRef;
            this.IsManuel = isManuel;
        }

        private void Talep_Load(object sender, EventArgs e)
        {
            dtTalep.Columns.Add("TerminTarihi", typeof(DateTime));
            dtTalep.Columns.Add("UreticiKodu", typeof(string));
            dtTalep.Columns.Add("Notlar", typeof(string));
            dtTalep.Columns.Add("OriginId", typeof(int));
            List<string> aksIds = new List<string>();
            foreach (DataRow dr in dtTalep.Rows)
            {
                int AksesuarId = dr["AksesuarId"].ToInt();
                aksIds.Add(AksesuarId.ToStr());
                int OriginId = AppSession.Lookups.V_Aksesuar.FindByAksesuarId(AksesuarId)["OriginId"].ToInt();
                dr["OriginId"] = OriginId;
            }

            DataTable dtUreticiKodlari = ExecuteDataTable("GetAksUreticiKodlari", string.Join(",", aksIds));
            foreach (DataRow drKod in dtUreticiKodlari.Rows)
                dtTalep.Select("AksesuarId=" + drKod["AksesuarId"].ToStr())[0]["UreticiKodu"] = drKod["UreticiKodu"].ToStr();

            gvTreeLines.Init(dtTalep);

            gvTreeLines.MakeColumnInvisible("AksSeriId");
            gvTreeLines.AddSummary("TalepEdilen", "EksikMiktar");
            gvTreeLines.FormatAsNumber(0, "TalepEdilen", "EksikMiktar");
            gvTreeLines.YanYanaGetirSagina("Aciklama", "EksikMiktar");
            // gvTreeLines.YanYanaGetir("EksikMiktar:TalepEdilen", "TerminTarihi:Notlar");

            gvTreeLines.Columns["ProductCategoryId"].SortOrder = ColumnSortOrder.Ascending;
            gvTreeLines.MakeReadOnly("TerminTarihi", "Notlar", "TalepEdilen", "OriginId");
            gvTreeLines.AddColumn("DevamiVarMi", typeof(string));

            RepositoryItemComboBox riDevamiVarMi = new RepositoryItemComboBox();
            riDevamiVarMi.Items.AddRange(new object[] { "Belki", "Hayır" });
            riDevamiVarMi.TextEditStyle = TextEditStyles.DisableTextEditor;
            gvTreeLines.Columns["DevamiVarMi"].ColumnEdit = riDevamiVarMi;

            gvTreeLines.EnableRowDelete();
            gvTreeLines.RowCellStyle += gv_RowCellStyle;
            gvTreeLines.SetAlternateRowStyle(false);

            gvTreeLines.SetCaptions("OriginId:Orjin", "DevamiVarMi:Devamı Var Mı?", "BrandId:Marka", "ProductCategoryId:Kategori", "Aciklama:Açıklama", "TerminTarihi:Termin");
            gvTreeLines.BestFitColumns();
            gvTreeLines.Columns["Notlar"].Width = 100;
        }

        private void gv_RowCellStyle(object sender, RowCellStyleEventArgs e)
        {
            if (e.RowHandle > -1)
            {
                if (e.Column.FieldName == "TalepEdilen")
                {
                    e.Appearance.Font = new Font(AppearanceObject.DefaultFont, FontStyle.Bold);
                    e.Appearance.ForeColor = Color.Red;
                }

                if (e.Column.FieldName == "TalepEdilen"
                        || e.Column.FieldName == "TerminTarihi"
                        || e.Column.FieldName == "Notlar"
                        || e.Column.FieldName == "OriginId"
                        || e.Column.FieldName == "DevamiVarMi"
                    )
                {
                    if (!gvTreeLines.IsCellSelected(e.RowHandle, e.Column))
                        e.Appearance.BackColor = Color.LightYellow;
                }
            }
        }

        private void btnOlustur_ItemClick(object sender, ItemClickEventArgs e)
        {
            gvTreeLines.EndEditing();

            int lenBosDevamiVarMi = gvTreeLines.DataTable().Select("DevamiVarMi is null and Isnull(TalepEdilen,0)>0 ").Length;
            if (lenBosDevamiVarMi > 0)
            {
                ShowErrorMessage("Talep geçtiğiniz satırlar için 'Devamı Var Mı?' alanını doldurun.");
                return;
            }


            int lenBosTermin = gvTreeLines.DataTable().Select("Isnull(TalepEdilen,0)>0 and TerminTarihi is null").Length;
            if (lenBosTermin > 0)
            {
                ShowErrorMessage("Talep geçtiğiniz satırlar için 'Termin' alanını doldurun.");
                return;
            }

            int lenOriginId = gvTreeLines.DataTable().Select("Isnull(TalepEdilen,0)>0 and isnull(OriginId,0) = 0").Length;
            if (lenOriginId > 0)
            {
                ShowErrorMessage("Talep geçtiğiniz satırlar için 'Orjin' alanını doldurun.");
                return;
            }


            using (TalepOlustur apo = new TalepOlustur(BrandId, SezonId, dtTalep.Serialize(), OrderRef, IsManuel))
                if (apo.ShowDialog() == DialogResult.OK)
                {
                    POIds = apo.AksPOIds;
                    this.DialogResult = DialogResult.OK;
                }
        }
    }
}